package com.java.base;

import java.util.Arrays;
import java.util.Date;

public class TestArraySort {
    static int[] data=new int[4000];

	public static void main(String[] args) {
		initialArray();
		System.out.println("the array before sort:");
		printArray();
		Date d1=new Date();
		arraySortC();
		Date d2=new Date();
		System.out.println("the result of sort:");
		printArray();
		System.out.println("排序所需的时间为："+(d2.getTime()-d1.getTime())+"毫秒");

	}
	public static void initialArray(){
		for(int i=0;i<data.length;i++){
			data[i]=(int)(Math.random()*10000);
		}
		
	}
	public static void printArray(){
		for(int i=0;i<data.length;i++){
			System.out.print(data[i]+"\t");
		}
		System.out.println();
	}
	/*
	 冒泡排序
	 */
	public static void arraySortA(){
		boolean flag=true;
		for(int i=0;i<data.length-1;i++){
			for(int j=0;j<data.length-1-i;j++){
				if(data[j]>data[j+1]){
					int temp=data[j+1];
					data[j+1]=data[j];
					data[j]=temp;
					flag=false;
				}
			}
			if(flag){
				break;
			}
		}
	}
	/*
	 选择排序 
	 */
	public static void arraySortB(){
		for(int i=0;i<data.length;i++){
			int p=i;
			for(int j=i;j<data.length;j++){
				if(data[j]<data[p]){
					p=j;
				}	
			}
			if(p!=i){
				int temp=data[p];
				data[p]=data[i];
				data[i]=temp;
			}
		}
	
	}
	/*
	 插入排序
	 */
	public static void arraySortC(){
		for(int i=0;i<data.length;i++){
			int k=0;
			while(data[i]>data[k]&&k<i){
				k++;
			}
			if(k==i){
				continue;
			}
			int temp=data[i];
			for(int j=i;j>k;j--){
				data[j]=data[j-1];
			}
			
			data[k]=temp;
		}
	}
	/*
	 JDK提供的排序方法，工具类Arrays的sort方法
	 */
	public static void arraySortD(){
		Arrays.sort(data);
	}

}
